#ifndef MPU6050_H
#define MPU6050_H

#include <Wire.h>
#include <MPU6050.h>
#include "I2Cdev.h"
#include "Arduino.h"

extern MPU6050 accelgyro;
extern int16_t ax, ay, az;
extern int16_t gx, gy, gz;

extern float Angle_x,Angle_y,Angle_z;

#define MPU6050_Addr    0x68    //WHO AM I 默认值0x68H（1101000B）（不含最低位），AD0低电平，所以MPU6050的IIC地址是0xd0H（11010000B）
#define WHO_AM_I        0x75    //IIC地址寄存器(默认0x68，只读)，AD0高，0x69
#define PWR_MGMT_1      0x6b    //电源管理，典型值：0x00(启用)
#define SMPLRT_DIV      0x19    //陀螺仪采样率，典型值：0x07(125Hz)
#define CONFIG          0x1a    //低通滤波频率，典型值：0x06(5Hz)
#define GYRO_CONFIG     0x1b    //陀螺仪自检及测量范围，典型值：0x18(不自检2000deg/s)
#define ACCEL_CONFIG    0x1c    //加速计自检、测量范围及高通滤波频率，典型值：0x01(不自检，2G，5Hz)

#define ACCEL_XOUT_H    0x3b
#define ACCEL_XOUT_L    0x3c
#define ACCEL_YOUT_H    0x3d
#define ACCEL_YOUT_L    0x3e
#define ACCEL_ZOUT_H    0x3f
#define ACCEL_ZOUT_L    0x40

#define TEMP_OUT_H      0x41
#define TEMP_OUT_L      0x42

#define GYRO_XOUT_H     0x43
#define GYRO_XOUT_L     0x44    
#define GYRO_YOUT_H     0x45
#define GYRO_YOUT_L     0x46
#define GYRO_ZOUT_H     0x47
#define GYRO_ZOUT_L     0x48

#define MPU_ACCEL_OFFS_REG        0x06    //accel_offs寄存器,可读取版本号,寄存器手册未提到
#define MPU_PROD_ID_REG           0x0c    //prod id寄存器,在寄存器手册未提到

#define MPU_SDA 19
#define MPU_SCL 22

void MPU6050_Init(void);
void MPU6050_Print(void);
void Angle_Calculate(void);
float Kalman_Filter(float Accel,float Gyro);


#endif
